package br.com.aerusc.persistence.dao;

import java.util.List;
import java.util.logging.Logger;

import br.com.aerusc.entity.Associado;
import br.com.aerusc.filters.FiltroAssociado;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;
import com.googlecode.objectify.util.DAOBase;

public class AssociadoDAO extends DAOBase {
	static {
		ObjectifyService.register(Associado.class);
	}
	private static final Logger log = Logger.getLogger(AssociadoDAO.class.getName());

	public Associado salvar(Associado associado) {
		Objectify ofy = ObjectifyService.begin();
		Associado retorno = null;
		try {
			ofy.put(associado);
			if (associado.getId() != null) {
				retorno = associado;
			}
		} catch (Exception e) {
			log.severe(e.getMessage());
		}

		return retorno;
	}
	
	public void remover(Associado associado) {
		Objectify ofy = ObjectifyService.begin();
		try {
			ofy.delete(associado);
		} catch (Exception e) {
			log.severe(e.getMessage());
		}
	}
	
	public List<Associado> listar() {
		Objectify objectify = ObjectifyService.begin();
		Query<Associado> q = objectify.query(Associado.class);
		List<Associado> retorno = q.list();
		return retorno;
	}
	
	public Associado recuperar(Long id){
		Objectify objectify = ObjectifyService.begin();
		Associado retorno = objectify.find(Associado.class, id);
		return retorno;
	}
	
	public List<Associado> listarPorFiltro(FiltroAssociado filtro) {
		Objectify objectify = ObjectifyService.begin();
		Query<Associado> q = objectify.query(Associado.class);
		if(!filtro.getNome().isEmpty()){
			q = q.filter("nome", filtro.getNome().trim());
			
		}
		if(filtro.getNumeroCarteira()!= null){
			q = q.filter("numeroCarteira", filtro.getNumeroCarteira());
		}
		List<Associado> retorno = q.list();
		return retorno;
	}

}
